package org.Stage1_logformat;

/**
 * @Auther: qingle
 * @Date: 2024/5/27-1:14
 * @Description:
 * @version: 1.0
 */
public class Code02_InsertionSort {

	/**
	 * 使用插入排序算法对整型数组进行排序。
	 *
	 * @param arr 需要排序的整型数组。如果数组为空或长度小于2，则不进行排序。
	 *
	 * 注意：这个方法不返回任何值，它直接在传入的数组上进行排序操作。
	 */
	public static void insertionSort(int[] arr) {
		// 检查数组是否为空或长度过短，不需要排序
		if (arr == null || arr.length < 2) {
			return;
		}
		// 遍历数组，从第二个元素开始进行插入排序
		for (int i = 1; i < arr.length; i++) {
			// 将当前元素与前面的元素逐个比较并逆序交换，直到找到合适的位置插入当前元素
			for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
				swap(arr, j, j + 1);
			}
		}
	}

	public static void swap(int[] arr, int i, int j) {
		int tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;
	}

	public static void main(String[] args) {
		int[] arr = {5, 4, 3, 2, 1};
		insertionSort(arr);
		for (int i : arr) {
			System.out.print(i + " ");
		}
	}
}
